//
//  ModuleDefine.h
//  LBBase
//
//  Created by Gary on 15/7/1.
//  Copyright (c) 2015年 Lebo. All rights reserved.
//

#ifndef ModuleDefine_h
#define ModuleDefine_h

//由业务模块id与相应模块的某个能力id组合成一个唯一的业务调用id
//32位业务调用id = 模块id（高16位）＋ 能力id（低16位）
#define BusinesID(x, y) (((x)<<16) + (y))

//从32位业务调用id中分离模块id
#define ModuleID(x) ((x)>>16)

//从32位业务调用id中分离能力id
#define FuncID(x) (((x)<<16)>>16)

#define BF                          [BusinessFramework sharedInstance]

#pragma mark - 业务模块ID定义

typedef enum ManagerModuleID {
    EManagerNone = 0,     //不可用的管理
    ENetworkManager = 16, //网络交互管理
    EDownloadManager,     //文件上传下载管理
    EDatabaseManager,     //数据库管理
    ELoginManager,        //登陆管理
    EProfileManager,      //个人信息管理
    ECarManager,          //车辆信息管理
} ManagerModuleID;

#pragma mark - 网络管理业务模块

typedef enum NetworkManagerCapability {
    ENetRetryAllRequestTasks, //重试所有之前因为token过期导致失败的请求
    ENetClearRetryAllRequestTasks, //清除重试的请求
    
    ENetGetReq,
    ENetPostReq,
    
    ENetReqPostLogin,       //登录
    ENetReqPostVersionUpdate, //版本更新
    
    ENetReqPostGetProfile, //获取个人信息
    
    ENetReqPostGetBrandList,         //获取车辆品牌列表
} NetworkManagerCapability;

#pragma mark - 文件上传下载管理模块

typedef enum DownloadManagerCapability {
    EAddDownloadCell, //添加上传/下载的任务单元
    
    EPauseDownloadQueueCell,   //暂停
    EResumeDownloadQueueCell,  //恢复
    ECancelDownloadQueueCell,  //取消
    ECancelDownloadQueueCells, //取消所有
    
    //下载管理器对当前上传/下载任务状态的发送通知
    EDownloadWaitRsp = 200, //任务正在等待
    EDownloadStartRsp,      //任务已经开始
    EDownloadPauseRsp,      //任务已被暂停
    EDownloadCancelRsp,     //任务已被取消
    EDownloadSuccRsp,       //任务执行成功
    EDownloadFailRsp,       //任务执行失败
    
    EDownloadProgressRsp, //当前任务执行的进度
} DownloadManagerCapability;

#pragma mark - 数据库管理模块

//数据库操作枚举
typedef enum DatabaseManagerCapability {
    EDBExecute,
    EDBExecuteAsync,
    EDBExecuteBatch,
    EDBExecuteBatchAsync,
    
    EDBSelect,
    EDBSelectAll,
    
    EDBInsert,
    EDBInsertAsync,
    EDBInsertBatch,
    EDBInsertBatchAsync,
    
    EDBDelete,
    EDBDeleteAsync,
    
} DatabaseManagerCapability;

#pragma mark - 登录管理业务模块

typedef enum LoginManagerCapability {
    ELoginLogin,     //登录
    ELoginLoginSucc, //登录成功
    ELoginLoginFail, //登录失败
    
    ELoginVersionUpdate,     //版本升级
    ELoginVersionUpdateSucc, //升级成功
    ELoginVersionUpdateFail, //升级失败
} LoginManagerCapability;

#pragma mark - 个人信息管理业务模块

typedef enum ProfileManagerCapability {
    EProfileGetProfile,     //获取个人信息
    EProfileGetProfileSucc, //获取个人信息成功
    EProfileGetProfileFail, //获取个人信息失败
} ProfileManagerCapability;

#pragma mark - 车辆管理业务模块

typedef enum CarManagerCapability {
    ECarGetBrandListFromDB, //从数据库中获取品牌
    ECarGetBrandList,       //获取品牌
    ECarGetBrandListSucc,
    ECarGetBrandListFail,
    
    ECarGetBrandSetList, //获取品牌车系
    ECarGetBrandSetListSucc,
    ECarGetBrandSetListFail,
} CarManagerCapability;

#endif
